package com.itheima.controller;
/*
* 预约信息
* */

import com.alibaba.dubbo.config.annotation.Reference;
import com.aliyuncs.exceptions.ClientException;
import com.itheima.constant.MessageConstant;
import com.itheima.constant.RedisMessageConstant;
import com.itheima.entity.Result;
import com.itheima.service.OrderService;
import com.itheima.utils.SMSUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import redis.clients.jedis.JedisPool;

import java.util.Map;

@RequestMapping("/order")
public class OrderController {

    @Autowired
    private JedisPool jedisPool;

    @Reference
    private OrderService orderService;

    @RequestMapping("/order")
    public Result order(@RequestBody Map map){//浏览器传过来的数据没有相应的实体类进行对应,所以用map尽心封装
        String telephone = (String) map.get("telephone");
        String orderDate = (String) map.get("orderDate");
        // 进行验证码的校验   因为进行验证码校验时,需要用到redis里的数据,但是要用手机号去找对应的验证码,所以第一步应该是获取map中的手机号
        String validateCode4Redis = jedisPool.getResource().get(telephone+ RedisMessageConstant.SENDTYPE_ORDER); //redis中数据
        String validateCode4Map = (String) map.get("validateCode");         //前台数据
        if (validateCode4Redis == null || !validateCode4Redis.equals(validateCode4Map)){//如果redis中没有此数据
            return new Result(false,MessageConstant.VALIDATECODE_ERROR);
        }
        //验证码校验通过,调用服务层,先查看当前日期,是否可以预定,预定是否已满
        //如果都满足,查询该手机号是否已经预定,没预定,进行预定,再查看是否是会员,自动完成注册会员的行为,最后发送验证码
        Result result = null;
        try {
            result = orderService.order(map);
           /* //说明其他工作都已完成,发送预约成功的信息这个要和上面的分开,以免抛出异常
            SMSUtils.sendShortMessage((SMSUtils.ORDER_NOTICE),telephone,orderDate);*/
//            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.ORDER_FAIL);
        }
        if (result.isFlag()){
            try {
                SMSUtils.sendShortMessage((SMSUtils.ORDER_NOTICE),telephone,orderDate);
            } catch (ClientException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    @RequestMapping("/findById")
    public Result orderSuccess(Integer id){
        try {
            //查询成功
            Map map = orderService.findById(id);
            return new Result(true,MessageConstant.QUERY_ORDER_SUCCESS,map);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,MessageConstant.QUERY_ORDER_FAIL);
        }
    }
}
